package string;

import java.util.ArrayList;
import java.util.List;

/**
 * @author kaho
 * @since 2020/12/23
 */
public class _17_电话号码的字母组合 {
    private static String[] letterMap = {
            " ",    //0
            "",     //1
            "abc",  //2
            "def",  //3
            "ghi",  //4
            "jkl",  //5
            "mno",  //6
            "pqrs", //7
            "tuv",  //8
            "wxyz"  //9
    };

    private static ArrayList<String> res;

    /**
     * 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
     * <p>
     * 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
     *
     * @param digits
     * @return
     */
    public static List<String> letterCombinations(String digits) {
        res = new ArrayList<>();
        if (digits.length() == 0) {
            return res;
        }
        DFS(digits, 0, "");

        return res;
    }

    private static void DFS(String digits, int idx, String s) {

        if (s.length() == digits.length()) {
            res.add(s);
            return;
        }
        char c = digits.charAt(idx);
        String letter = letterMap[c - '0'];
        for (int i = 0; i < letter.length(); i++) {
            DFS(digits, idx+1, s+letter.charAt(i));
        }

    }

    public static void main(String[] args) {
        letterCombinations("23");
    }
}
